package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	s := "Yes, 是厅脸一直在奇才" //UTF-8
	fmt.Println(len(s))
	fmt.Printf("%s\n", []byte(s))
	fmt.Printf("%X\n", []byte(s)) // X打印十六进制(大写), 用x小写
	for _, b := range []byte(s) {
		fmt.Printf("%X ", b)
	}
	fmt.Println()
	for i, ch := range s { // ch is a rune
		fmt.Printf("(%d %X)", i, ch) // i 字节
	}
	fmt.Println()
	fmt.Println("Rune count:", utf8.RuneCountInString(s)) // 获取字符数

	b := []byte(s)
	for len(b) > 0 {
		ch, size := utf8.DecodeRune(b)
		b = b[size:]
		fmt.Printf("%c ", ch)
	}

	fmt.Println()
	for i, ch := range []rune(s) {
		fmt.Printf("(%d %c)", i, ch)
	}
	fmt.Println()
}

/*
todo: rune相当于go的char
- 使用range遍历position, rune对 (英文字节pos+1, 中文pos+3)
- 使用utf8.RuneCountInString获取字符数量
- 使用len获得的是字节长度
- 使用[]byte获得的字节

strings包中有很多操作字符串的函数
- Fields, Split, Join
- Contains, Index
- ToLower, ToUpper
- Trim, TrimRight, TrimLeft
*/
